import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化标签映射字典
tag_map = {}

# 启动 Chrome 浏览器
browser = webdriver.Chrome()

# 遍历 P1000 到 P2000 的题目
for i in range(3600, 4034):
    problem_number = f"B{i}"
    url = f"https://www.luogu.com.cn/problem/{problem_number}"
    browser.get(url)
    browser.implicitly_wait(2)

    try:
        # 查找所有标签元素
        button = browser.find_element(By.XPATH, "//*[@id='app']/div[2]/main/div/section[1]/div[2]/div[2]/span")
        browser.execute_script("arguments[0].click();", button)

        tags = browser.find_elements(By.XPATH, "//*[@id='app']/div[2]/main/div/section[1]/div[2]/div[1]/div/a")
        for tag in tags:
            # 提取标签的索引和字符串
            href = tag.get_attribute("href")
            tag_index = href.split("=")[-1]
            tag_string = tag.text.strip()
            # 检查标签内容不为空，避免空标签
            if tag_string and tag_index not in tag_map:
                tag_map[tag_index] = tag_string
    except Exception as e:
        print(f"处理题目 {problem_number} 时出错: {e}")

    time.sleep(0.5)  # 等待以避免请求过快

# 关闭浏览器
browser.quit()

# 去除空行：确保 tag_string 不为空（在上面的代码中已经去掉了空字符串的行）

# 按 index 排序
sorted_tag_map = dict(sorted(tag_map.items(), key=lambda item: int(item[0])))

# 将 tag_map 转换为 DataFrame
df = pd.DataFrame(list(sorted_tag_map.items()), columns=['Index', 'Tag'])

# 将 DataFrame 存储为 Excel 文件
df.to_excel("tag_mapB3.xlsx", index=False)

print("标签映射已存入 tag_map.xlsx 文件")
